﻿Imports System.Data.Odbc
Imports System.Data.SqlClient
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Printing

Public Class frmCot_Solicitud
    Dim Bitacora As New clsActividad
    Dim Usuario As New clsUsuarioPrincipal

    Private mstrCondicion As String

    Private CodigosProductos As New DataTable("Codigos")
    Private NombresProductos As New DataTable("Nombres")
    Private CodigosAlmacenes As New DataTable("CodAlmacen")
    Private NombresAlamcenes As New DataTable("NomAlmacen")
    Private CadenasAutocompletado As New AutoCompleteStringCollection
    Private CadenasAutocompletado2 As New AutoCompleteStringCollection
    Private CadenasAutocompletado3 As New AutoCompleteStringCollection
    Private CadenasAutocompletado4 As New AutoCompleteStringCollection

    Private prtSettings As PrinterSettings
    Private prtDoc1 As PrintDocument
    Private prtDoc2 As PrintDocument
    Private prtDoc3 As PrintDocument
    Private prtFont As System.Drawing.Font
    Private lineaActual As Integer

    Dim Solicitud As New clsCot_Solicitud

    Private minuto As Integer = 0
    Private segundo As Integer = 0
    Private milisegundo As Integer = 0
    Private minutoM As Integer = 0
    Private segundoM As Integer = 0
    Private milisegundoM As Integer = 0

    Public WriteOnly Property Condicion() As String
        Set(ByVal value As String)
            mstrCondicion = value
        End Set
    End Property

    Private Sub frmCot_Solicitud_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        If dgSolicitud.Rows(0).Cells(0).Value = "" Then
            Call SetSqlCitra("DELETE FROM Cot_Solicitud WHERE Folio=" & txtFolio.Text)
        End If

        Bitacora.RegistraActividad("Cerró al Módulo de Cotizaciones: Solicitud de refacciones")
        Usuario.Ubicacion("Ventana Principal")

        CodigosProductos.PrimaryKey = Nothing
        NombresProductos.PrimaryKey = Nothing
        CodigosAlmacenes.PrimaryKey = Nothing
        NombresAlamcenes.PrimaryKey = Nothing

        CodigosProductos.Clear()
        CodigosProductos.Columns.Clear()
        NombresProductos.Clear()
        NombresProductos.Columns.Clear()
        CodigosAlmacenes.Clear()
        CodigosAlmacenes.Columns.Clear()
        NombresAlamcenes.Clear()
        NombresAlamcenes.Columns.Clear()


        'CierraSDK()

        frmMain.statusActividad.Text = " "
        Application.DoEvents()
    End Sub
    Private Sub frmCot_Solicitud_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ToolStrip1.Cursor = Cursors.Hand
        ToolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System
        datFecha.Value = Now()

        Dim Folio As Integer = BuscarIntDatoCitra("SELECT MAX(Folio) as Folio FROM Cot_Solicitud") + 1

        txtFolio.Text = Folio
        'txtFolio.Text = 0

        Solicitud.Folio = txtFolio.Text
        Solicitud.Fecha = datFecha.Value
        Solicitud.Solicita = BuscarStrDatoInicial("SELECT NombreCompleto FROM Usuarios WHERE UPPER(Nombre)='" & UCase(UsuarioActivo) & "'")
        Solicitud.Estado = 0
        Solicitud.Insertar()

        chImprimir.Checked = False
        chVistaPrevia.Checked = False

        Bitacora.RegistraActividad("Ingresó al Módulo de Cotizaciones: Solicitud de refacciones")
        usuario.Ubicacion("Módulo de Cotizaciones")

        'CargaConceptos()
        'CargaSDK()

        CargaCodigosProductos()
        Dim claves(0) As DataColumn
        claves(0) = CodigosProductos.Columns("Codigo")
        CodigosProductos.PrimaryKey = claves

        For Each Codigo In CodigosProductos.Rows
            CadenasAutocompletado.Add(Codigo("Codigo"))
        Next

        'CargaNombresProductos()
        Dim Llaves(0) As DataColumn
        Llaves(0) = NombresProductos.Columns("Nombre")
        'NombresProductos.PrimaryKey = Llaves

        For Each Nombre In NombresProductos.Rows
            CadenasAutocompletado2.Add(Nombre("Nombre"))
        Next

        CargaCodigosAlmacenes()
        Dim claves2(0) As DataColumn
        claves2(0) = CodigosAlmacenes.Columns("Codigo")
        CodigosAlmacenes.PrimaryKey = claves2

        For Each CodigoA In CodigosAlmacenes.Rows
            CadenasAutocompletado3.Add(CodigoA("Codigo"))
        Next

        Dim Claves3(0) As DataColumn
        Claves3(0) = NombresAlamcenes.Columns("Nombre")
        'NombresAlamcenes.PrimaryKey = Claves3

        For Each NombreA In NombresAlamcenes.Rows
            CadenasAutocompletado4.Add(NombreA("Nombre"))
        Next


        frmMain.statusActividad.Text = ": Módulo de Cotizaciones: Solicitud de refacciones"
    End Sub
    Sub CargaCodigosProductos()
        CodigosProductos.Columns.Add("Codigo")
        NombresProductos.Columns.Add("Nombre")

        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "Select cCodigoP01,cNombreP01"
        strSql = strSql & " From MGW10005 WHERE cstatusp01=1"
        strSql = strSql & " order by cCodigoP01"

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader
        Do While rdBuscar.Read()
            CodigosProductos.Rows.Add(rdBuscar("cCodigoP01").ToString.Trim)
            NombresProductos.Rows.Add(rdBuscar("cNombreP01").ToString.Trim)
        Loop


    End Sub
    Sub CargaCodigosAlmacenes()
        CodigosAlmacenes.Columns.Add("Codigo")
        NombresAlamcenes.Columns.Add("Nombre")

        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""
        strSql = "Select ccodigoa01,cnombrea01"
        strSql = strSql & " From MGW10003"
        strSql = strSql & " order by cCodigoa01"

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader
        Do While rdBuscar.Read()
            CodigosAlmacenes.Rows.Add(rdBuscar("cCodigoA01").ToString.Trim)
            NombresAlamcenes.Rows.Add(rdBuscar("cNombreA01").ToString.Trim)
        Loop

    End Sub
    Sub Actualizar()
        Dim intFolio As Integer = 0
        If Me.txtFolio.Text <> "" Then
            intFolio = txtFolio.Text
            Solicitud.Folio = txtFolio.Text
        Else
            intFolio = 0
            Solicitud.Folio = 0

        End If
        Solicitud.Buscar()
        Scatter()
        txtFolio.Text = intFolio
        Solicitud.Folio = txtFolio.Text
    End Sub
    Private Sub Scatter()
        datFecha.Value = Solicitud.Fecha

        Select Case Solicitud.Estado
            Case 0
                txtStatus.Text = "PENDIENTE"
            Case 1
                txtStatus.Text = "SURTIDA"
            Case 2
                txtStatus.Text = "PARCIALMENTE SURTIDA"
            Case 3
                txtStatus.Text = "CANCELADA"
            Case 4
                txtStatus.Text = "EN PROCESO"
        End Select

        CargaSolicitud()

    End Sub

    Private Sub txtStatus_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtStatus.TextChanged
        If Trim(Me.txtStatus.Text) = "PENDIENTE" Then
            txtStatus.BackColor = Color.Yellow
        ElseIf Trim(Me.txtStatus.Text) = "SURTIDA" Then
            Me.txtStatus.BackColor = Color.Blue
        ElseIf Trim(Me.txtStatus.Text) = "PARCIALMENTE SURTIDA" Then
            Me.txtStatus.BackColor = Color.Green
        ElseIf Trim(Me.txtStatus.Text) = "CANCELADA" Then
            Me.txtStatus.BackColor = Color.Red
        ElseIf Trim(Me.txtStatus.Text) = "EN PROCESO" Then
            Me.txtStatus.BackColor = Color.Lime
        End If
    End Sub
    Private Sub ControlEdicion(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles dgSolicitud.EditingControlShowing
        If dgSolicitud.CurrentCell.ColumnIndex = 0 Then
            DirectCast(e.Control, TextBox).AutoCompleteMode = AutoCompleteMode.SuggestAppend
            DirectCast(e.Control, TextBox).AutoCompleteSource = AutoCompleteSource.CustomSource
            DirectCast(e.Control, TextBox).AutoCompleteCustomSource = CadenasAutocompletado
        ElseIf dgSolicitud.CurrentCell.ColumnIndex = 1 Then
            DirectCast(e.Control, TextBox).AutoCompleteMode = AutoCompleteMode.SuggestAppend
            DirectCast(e.Control, TextBox).AutoCompleteSource = AutoCompleteSource.CustomSource
            DirectCast(e.Control, TextBox).AutoCompleteCustomSource = CadenasAutocompletado2
        ElseIf dgSolicitud.CurrentCell.ColumnIndex = 3 Then
            DirectCast(e.Control, TextBox).AutoCompleteMode = AutoCompleteMode.SuggestAppend
            DirectCast(e.Control, TextBox).AutoCompleteSource = AutoCompleteSource.CustomSource
            DirectCast(e.Control, TextBox).AutoCompleteCustomSource = CadenasAutocompletado3
        ElseIf dgSolicitud.CurrentCell.ColumnIndex = 4 Then
            DirectCast(e.Control, TextBox).AutoCompleteMode = AutoCompleteMode.SuggestAppend
            DirectCast(e.Control, TextBox).AutoCompleteSource = AutoCompleteSource.CustomSource
            DirectCast(e.Control, TextBox).AutoCompleteCustomSource = CadenasAutocompletado4
        Else
            DirectCast(e.Control, TextBox).AutoCompleteMode = Nothing
        End If
    End Sub
    Private Sub FinDeEdicion(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dgSolicitud.CellEndEdit
        'Añadir aqui las validaciones necesarias

        Try
            Dim Status As Integer = Solicitud.Estado

            If Status = 0 Then
                If dgSolicitud.CurrentCell.ColumnIndex = 0 Then
                    dgSolicitud.CurrentRow.Cells(1).Value = BuscarStrDatoCitra("MGW10005", "CNOMBREP01", "UPPER(CCODIGOP01)='" & UCase(dgSolicitud.CurrentRow.Cells(0).Value.ToString.Trim) & "'")
                ElseIf dgSolicitud.CurrentCell.ColumnIndex = 1 Then
                    dgSolicitud.CurrentRow.Cells(0).Value = BuscarStrDatoCitra("MGW10005", "CCODIGOP01", "UPPER(CNOMBREP01)='" & UCase(dgSolicitud.CurrentRow.Cells(1).Value.ToString.Trim) & "'")
                ElseIf dgSolicitud.CurrentCell.ColumnIndex = 3 Then
                    dgSolicitud.CurrentRow.Cells(4).Value = BuscarStrDatoCitra("MGW10003", "CNOMBREA01", "UPPER(CCODIGOA01)='" & UCase(dgSolicitud.CurrentRow.Cells(3).Value.ToString.Trim) & "'")
                ElseIf dgSolicitud.CurrentCell.ColumnIndex = 4 Then
                    dgSolicitud.CurrentRow.Cells(3).Value = BuscarStrDatoCitra("MGW10003", "CCODIGOA01", "UPPER(CNOMBREA01)='" & UCase(dgSolicitud.CurrentRow.Cells(4).Value.ToString.Trim) & "'")

                End If
            ElseIf Status = 3 Then
                MsgBox("No se pueden agregar cotizaciones porque el documento esta cancelado", MsgBoxStyle.Exclamation, "Aviso")
                dgSolicitud.CurrentRow.Cells(0).Value = ""
                dgSolicitud.CurrentRow.Cells(1).Value = ""
                dgSolicitud.CurrentRow.Cells(2).Value = ""
                dgSolicitud.CurrentRow.Cells(3).Value = ""
                dgSolicitud.CurrentRow.Cells(4).Value = ""
            Else
                MsgBox("No se pueden agregar cotizaciones porque ya ha sido procesado el documento", MsgBoxStyle.Exclamation, "Aviso")
                dgSolicitud.CurrentRow.Cells(0).Value = ""
                dgSolicitud.CurrentRow.Cells(1).Value = ""
                dgSolicitud.CurrentRow.Cells(2).Value = ""
                dgSolicitud.CurrentRow.Cells(3).Value = ""
                dgSolicitud.CurrentRow.Cells(4).Value = ""
            End If

        Catch ex As Exception
            '.... Accion en caso de excepcion
        End Try
    End Sub
    Sub CargaSolicitud()
        dgSolicitud.Rows.Clear()

        Dim cnConn As New SqlConnection
        cnConn.ConnectionString = CitraConnection

        Dim strSql As String = ""

        strSql = "SELECT CCODIGOP01,CNOMBREP01,CANTIDAD,CCODIGOA01,CNOMBREA01"
        strSql = strSql & " FROM COT_SOLICITUD S INNER JOIN COT_SOLICITUDDETALLE D ON S.IDSOLICITUD=D.IDSOLICITUD INNER JOIN MGW10003 A ON D.IDALMACEN=A.CIDALMACEN INNER JOIN MGW10005 P ON D.IDPRODUCTO=P.CIDPRODU01"
        strSql = strSql & " WHERE FOLIO=" & txtFolio.Text

        Dim cmdBuscar As New SqlCommand
        cmdBuscar.Connection = cnConn
        cmdBuscar.CommandText = strSql
        Dim rdBuscar As SqlDataReader
        cnConn.Open()
        rdBuscar = cmdBuscar.ExecuteReader
        Do While rdBuscar.Read()
            dgSolicitud.Rows.Add(rdBuscar("CCODIGOP01"), rdBuscar("CNOMBREP01"), rdBuscar("CANTIDAD"), rdBuscar("CCODIGOA01"), rdBuscar("CNOMBREA01"))
        Loop
    End Sub

    Private Sub txtFolio_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFolio.TextChanged
        Actualizar()

    End Sub

    Private Sub dgSolicitud_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgSolicitud.CellContentClick

    End Sub

    Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
        Close()

    End Sub

    Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click
        Dim Usuario As String = BuscarStrDatoInicial("SELECT NombreCompleto FROM Usuarios WHERE UPPER(Nombre)='" & UCase(UsuarioActivo) & "'")
        Dim Usuario_Creo As String = BuscarStrDatoCitra("SELECT Solicita FROM COT_SOLICITUD WHERE Folio=" & txtFolio.Text)

        If Usuario <> Usuario_Creo Then
            MsgBox("La solocitud fue creada por otro usuario, no tienes privilegios para editarla", MsgBoxStyle.Critical, "Aviso")
            Exit Sub
        End If

        Dim status As Integer = BuscarIntDatoCitra("SELECT Estado FROM Cot_Solicitud WHERE Folio=" & txtFolio.Text)
        If status = 1 Then
            MsgBox("No puedes editar la solicitud porque ya ha sido surtida", MsgBoxStyle.Exclamation, "Aviso")
            Actualizar()
            Exit Sub
        ElseIf status = 2 Then
            MsgBox("No puedes editar la solicitud porque ya ha sido parcialmente surtida", MsgBoxStyle.Exclamation, "Aviso")
            Actualizar()
            Exit Sub
        ElseIf status = 3 Then
            MsgBox("No puedes editar la solicitud porque se encuentra cancelada", MsgBoxStyle.Exclamation, "Aviso")
            Actualizar()
            Exit Sub
        ElseIf status = 4 Then
            MsgBox("No pudes editar la solicitud porque actualmente esta en proceso", MsgBoxStyle.Exclamation, "Aviso")
            Actualizar()
            Exit Sub
        End If


        Dim Detalle As New clsCot_SolicitudDetalle
        For I = 0 To dgSolicitud.Rows.Count - 1
            If dgSolicitud.Rows(I).Cells(0).Value <> "" Then
                Detalle.IdSolicitud = BuscarIntDatoCitra("SELECT IdSolicitud FROM Cot_Solicitud WHERE Folio=" & txtFolio.Text)
                Detalle.IdProducto = BuscarIntDatoCitra("SELECT CIDPRODU01 FROM MGW10005 WHERE UPPER(CCODIGOP01)='" & UCase(dgSolicitud.Rows(I).Cells(0).Value) & "'")
                Detalle.Cantidad = dgSolicitud.Rows(I).Cells(2).Value
                Detalle.IdAlmacen = BuscarIntDatoCitra("SELECT CIDALMACEN FROM MGW10003 WHERE UPPER(CCODIGOA01)='" & UCase(dgSolicitud.Rows(I).Cells(3).Value) & "'")
                Detalle.Estado = 0
                Detalle.Insertar()
            End If
        Next

        Dim Folio As Integer = BuscarIntDatoCitra("SELECT MAX(Folio) as Folio FROM Cot_Solicitud") + 1

        txtFolio.Text = Folio
       
        Solicitud.Folio = txtFolio.Text
        Solicitud.Fecha = datFecha.Value
        Solicitud.Solicita = BuscarStrDatoInicial("SELECT NombreCompleto FROM Usuarios WHERE UPPER(Nombre)='" & UCase(UsuarioActivo) & "'")
        Solicitud.Estado = 0
        Solicitud.Insertar()


    End Sub
End Class